
/*
            主程序入口
 */

import com.sun.org.apache.xpath.internal.operations.Or;

import java.util.ArrayList;
import java.util.Scanner;

public class MainApp {
    static Scanner scanner=new Scanner(System.in);
    //创建一个ArrayList集合用来储存不同类型的用户
    static ArrayList<User> users=new ArrayList<>();
    //创建一个ArrayList用来存储商品信息
    static ArrayList<Goods> goods=new ArrayList<>();
    //创建一个ArrayList用来存储订单信息
    static ArrayList<Order> orders=new ArrayList<>();
    public static void main(String[] args) {
        //存入用户
        users.add(new Member("黑马","123456"));
        users.add(new Business("播仔","123456"));
        //存入商品
        goods.add(new Goods("G001","华为手机",4000.0,"手机"));
        goods.add(new Goods("G002","苹果手机",8000.0,"手机"));
        goods.add(new Goods("G003","HP笔记本",6000.0,"电脑"));
        goods.add(new Goods("G004","罗技鼠标",100.0,"鼠标"));
        //进入系统死循环不会退出
        while (true){
            System.out.println("--------欢迎使用黑马商城--------");
            System.out.println("请输入用户名：");
            String loginName=scanner.next();
            System.out.println("请输入密码：");
            String passWord=scanner.next();
            User user = checkLoing(loginName, passWord, users);
            //将用户输入的信息对应的用户返回进行下一步判断用户类型进入对应的用户页面
            if (user instanceof Member){
                showMemberUI(user,goods);
            }else {
                showBusinessUI(user,goods);
            }
            //4退出会转到这里
            System.out.println("继续登录系统请输入Y，否则退出系统");
            if (scanner.next().equals("Y")){
                continue;
            }else {
                break;
            }
        }

    }


    //浏览商品
    public static void browseGoodsList(ArrayList<Goods> goods,ArrayList<Order> orders){
        //调用查看商品
        findAllGoods(goods);
        System.out.println("请输入要购买的商品序号:");
        int serial=scanner.nextInt();
        Goods goods1=null;
        int amount;
        //循环判断是否有对应序号的商品并将对应商品拿出
        for (int i = 0; i < goods.size(); i++) {
            if (i==(serial-1)){
               goods1=goods.get(i);
            }
        }
        //没找到直接结束方法，找到获取数量
        if (goods1==null){
            System.out.println("输入的商品序号有误,请重新操作!");
            return ;
        }else {
            System.out.println("请输入购买商品的数量:");
            amount=scanner.nextInt();
        }
        //根据单价数量计算总价
        double transactionMoney=goods1.getPrice()*amount;
        //打印部分订单信息
        System.out.println(goods1);
        System.out.println("商品数量："+amount);
        System.out.println("交易金额："+(goods1.getPrice()*amount));
        System.out.println("-----------------------------");
        //确认支付
        System.out.println("是否支付订单金额：Y/N");
        Boolean isPay;
        if (scanner.next().equals("Y")){
            //判断支付方式如果出现奇怪数值取消订单跳出方法
            System.out.println("请选择支付方式：微信 、支付宝");
            String payment=scanner.next();
            if (payment.equals("微信")||payment.equals("支付宝")){
                isPay=true;
            }else {
                System.out.println("支付错误,订单取消!");
                return;
            }
        }else{
            isPay=false;
        }
        //添加订单
        orders.add(new Order(goods1,amount,transactionMoney,isPay));
    }

    //用户登录
    public static User checkLoing(String loginName,String password,ArrayList<User> users){
        //死循环写不对别出来
        while (true){
            //遍历查找正确对象如两值全对则返回
            for (int i = 0; i < users.size(); i++) {
                if (users.get(i).getLoginName().equals(loginName)){
                    if (users.get(i).getPassword().equals(password)){
                        return users.get(i);
                    }
                }
            }
            //如果没有在集合中找到进入下一次输入
            System.out.println("您输入的用户名和密码不存在。请继续输入！");
            System.out.println("--------欢迎使用黑马商城--------");
            System.out.println("请输入用户名：");
            loginName=scanner.next();
            System.out.println("请输入密码：");
            password=scanner.next();
            checkLoing(loginName,password,users);
        }


    }

    //查看商品
    public static void findAllGoods(ArrayList<Goods> goods){
        //循环输出
        System.out.println("序号"+"\t\t"+"编号"+"\t\t"+"名称"+"\t\t"+"单价"+"\t\t"+"类别");
        for (int i = 0; i < goods.size(); i++) {
            System.out.format("%-8s%-8s%-8s%-8s%s\n",(i+1),goods.get(i).getId(),goods.get(i).getName(),goods.get(i).getPrice(),goods.get(i).getCategory());
        }
    }

    //查看订单
    public static void findAllOrder(ArrayList<Order> orders){
        //循环输出
        System.out.println("编号"+"\t\t"+"名称"+"\t\t"+"单价"+"\t\t"+"类别"+"\t\t"+"数量"+"\t\t"+"总金额"+"\t\t"+"支付状态");
        for (int i = 0; i < orders.size(); i++) {
            System.out.format("%-8s%-8s%-8s%-8s%-8s%-8s%s\n",orders.get(i).getGoods().getId(),orders.get(i).getGoods().getName(),orders.get(i).getGoods().getPrice(),orders.get(i).getGoods().getCategory(),orders.get(i).getAmount(),orders.get(i).getTransactionMoney(),orders.get(i).isPay());
        }
    }

    //上架商品
    public static void goodsDownShelf(ArrayList<Goods> goods){
        //建个新的商品
        Goods goods1=new Goods();
        String s;
        System.out.println("请输入商品编号：");
        s=scanner.next();
        goods1.setId(s);
        System.out.println("请输入商品名称：");
        s=scanner.next();
        goods1.setName(s);
        System.out.println("请输入商品单价：");
        int i=scanner.nextInt();
        goods1.setPrice(i);
        System.out.println("请输入商品类别：");
        s=scanner.next();
        goods1.setCategory(s);
        //放进去
        goods.add(goods1);
        System.out.println(goods1.getName()+"商品已上架");
        System.out.println("-----------------------------");
    }

    //下架商品
    public static void goodsUpperShelf(ArrayList<Goods> goods){
        System.out.println("请输入下架商品编号:");
        String s=scanner.next();
        //循环匹配对象
        for (int i = 0; i < goods.size(); i++) {
            if (goods.get(i).getId().equals(s)) {
                goods.remove(i);
                System.out.println("编号为"+s+"的商品已下架!");
                return;     //找到删完就跑
            }
        }
        //没找到才输出
        System.out.println("要下架的商品编号不存在,请重新操作!");

    }

    //进入商户界面
    public static void showBusinessUI(User user,ArrayList<Goods> goods){
        while (true){
            System.out.println("------ 欢迎"+user.getLoginName()+"进入商户系统 ------");
            System.out.println("1. 上架商品");
            System.out.println("2. 下架商品");
            System.out.println("3. 查看商品");
            System.out.println("4. 商户退出");
            System.out.println("-----------------------------");
            System.out.println("请选择功能：");
            //输入选择项
            int select=scanner.nextInt();
            //switch选择
            switch (select){
                case 1:
                    goodsDownShelf(goods);      //上架商品
                    break;
                case 2:
                    goodsUpperShelf(goods);     //下架商品
                    break;
                case 3:
                    findAllGoods(goods);        //查看商品
                    break;
                case 4:
                    break;                      //商户退出啥也不干
                default:
                    System.out.println("选择错误，请重新操作!");
            }
            //逃出死循环
            if (select==4) {
                break;
            }
        }

    }

    //进入会员界面
    public static void showMemberUI(User user,ArrayList<Goods> goods){
        while (true){
            System.out.println("------ 欢迎"+user.getLoginName()+"进入黑马商城 ------");
            System.out.println("1. 浏览商品");
            System.out.println("2. 查看订单");
            System.out.println("3. 会员退出");
            System.out.println("-----------------------------");
            System.out.println("请选择功能：");
            //输入选择项
            int select=scanner.nextInt();
            //switch选择
            switch (select){
                case 1:
                    browseGoodsList(goods,orders);      //浏览商品
                    break;
                case 2:
                    findAllOrder(orders);     //查看订单
                    break;
                case 3:
                    break;                      //会员退出啥也不干
                default:
                    System.out.println("选择错误，请重新操作!");
            }
            //逃出死循环
            if (select==3) {
                break;
            }
        }
    }


}
